#!/usr/bin/perl

package subroutines;

open(TEMPORAL,'>/tmp/plist.tmp');


#Este hash guarda los encabezados que se muestran en el listado. La key es el nombre del campo, y los valores son
#1) La posicion dentro del registro dentro de la fila en el archivo de beneficiarios nuevos
#2) El largo del campo al mostrarse en la pantalla


my %header=(
  
   '1beneficio' => [2, 9],
   '2agencia' => [0, 15],
   '3cuil' => [3, 12], 
   '4apellido' => [6, 15],
   '5provincia' => [10, 20],
   '6estado' => [15, 10],
   '7fecha efectiva alta' => [12,19],
  );
  
#
#    Esta funcion imprime la ayuda

 
sub showAyuda{
    
print "

Uso: plist.pl [OPCIÓN]
Muestra la lista de beneficiario nuevos.
 beneficio, agencia, cuil, apellido, provincia, estado, fecha efectiva de alta
Opciones
  -f,  Lista de archivaos para mostrar sus beneficiarios (DEFECTO: TODOS)
  -a,  Filtra por agencias, por defecto todas
  -b,  Filtra por beneficio
  -c,  Muestra una matriz de control de provincias/beneficios
  -ea, Muestra sólo los beneficiarios aprobados
  -er, Muestra sólo los beneficiarios rechazados
  -ep, Muestra sólo los beneficiarios pendientes
  -t   Muestra por salida estandar (Opción por defecto)
  -d   Imprime salida por archivo en el directorio list
  -td  Imprime por ambas salidas
  -h   Muestra ayuda por pantalla
";
}    


#    Parsea los argumentos y devuelve un array
#    con la key el parametro y los valores un array con las opciones para ese parametro


sub parseArguments{
  
  my %separados;
  
  my $thisArgum;
  
  my $actual;
  
  foreach $thisArgum (@_){
		
	if ( ($thisArgum !~ /^-/) and ($actual) ){
	    
	    push @{$separados{$actual}}, $thisArgum;
    
                     
      }
      else{
          $actual = $thisArgum;
          
          $separados{$actual} = [];      
          
      }
      
  }
    
  %separados;
  	
}

# Obtiene los archivos pasados por argumento a la opción files 

sub getFiles{
    
  my $files;
    
  $files = join(',', @_);

  $files = $files?$files:'*';
  
  $files
   
}


#    Imprime una fila del listado


sub printRows{
    
  foreach my $i (sort keys (%header)){    
    
    my @array = @{$header{$i}};
    
    printf TEMPORAL "%". $array[1]."s |", @_[$array[0]];
           
                
  }
  
  print TEMPORAL "\n";

}


#    Imprimie la matriz de control de beneficios por provincia

sub printControl{

    my $fieldProvinciaNum = 31;
    
    my $fieldProvincia = "%-".$fieldProvinciaNum."s |";
    
    my $fieldBeneficioNum = 8;
    
    my $fieldBeneficio = "%".$fieldBeneficioNum."s |" ;

    my ($control, $provinciaSuma, $beneficioSuma) = @_;
    
    my %controlHash = %{$control};
    
    my %provinciaSumaHash = %{$provinciaSuma};
    
    my %beneficioSumaHash = %{$beneficioSuma};
    
    my $largo = scalar keys %beneficioSumaHash;
    
    print TEMPORAL "\n\n", "*"x50, "\n* Matríz de Control de beneficios por provincia  *\n","*"x50, "\n";
    
    print TEMPORAL "_" x ($fieldProvinciaNum + $largo*11+35), "\n\n";
     
    printf TEMPORAL  "$fieldProvincia","Beneficio/Provincia";
    
    foreach my $beneficioTitulo (sort keys %beneficioSumaHash){
           
       printf TEMPORAL "$fieldBeneficio", "$beneficioTitulo";
    }
    
    
    printf TEMPORAL " %32s\n", "Total Beneficios por Provincia";
    
    print TEMPORAL "_" x (32 + $largo*11 +35), "\n\n";
           
    foreach my $thisProvincia (sort keys %controlHash){
     
        printf TEMPORAL "$fieldProvincia", "$thisProvincia";
        
      
        
        foreach my $thisBeneficio (sort keys %beneficioSumaHash){       
           
           printf TEMPORAL "$fieldBeneficio",  exists($controlHash{$thisProvincia}{$thisBeneficio})?$controlHash{$thisProvincia}{$thisBeneficio}:0;
        }
      
        
        printf TEMPORAL "%34s ", $provinciaSumaHash{$thisProvincia};
        
        print TEMPORAL "\n";
    }
    
    print TEMPORAL "_" x ($fieldProvinciaNum + $largo*11+35), "\n\n";
    
    printf TEMPORAL "$fieldProvincia","Total Beneficio";
    
    my $beneficioProvinciaGlobal = 0;
    
    foreach my $beneficioTotal (sort keys %beneficioSumaHash){
            $beneficioProvinciaGlobal += $beneficioSumaHash{$beneficioTotal};
            printf TEMPORAL "$fieldBeneficio", "$beneficioSumaHash{$beneficioTotal}";
    }
    
    printf TEMPORAL "%34s\n", $beneficioProvinciaGlobal;
    
    print TEMPORAL "_" x (32 + $largo*11+35), "\n\n";
    
}

sub printHeader{
    
    my $largo = 4;
    
    print TEMPORAL "\n";
    
    print TEMPORAL "*"x35, "\n* Listado de nuevos beneficiarios *\n","*"x35, "\n\n";
    
    foreach my $i (sort keys %header){    
    
        my @array = @{$header{$i}};
    
        printf TEMPORAL "%". $array[1]."s |", substr($i,1);
        
        $largo += $array[1]+2;
    
    }
     
  print TEMPORAL "\n";
  
  print TEMPORAL "_" x ($largo), "\n\n";
    
}